}
else
{
- inst_copy_from_guest(buffer, svm_rip2pointer(v), MAX_INST_LEN);
+ if ( inst_copy_from_guest(buffer, svm_rip2pointer(v), MAX_INST_LEN)
+ != MAX_INST_LEN )
+ return 0;
buf = buffer;
}
{
unsigned int eax, ebx, ecx, edx, inst_len;
+ inst_len = __get_instruction_length(current, INSTR_CPUID, NULL);
+ if ( inst_len == 0 )
+ return;
+
eax = regs->eax;
ebx = regs->ebx;
ecx = regs->ecx;
regs->ecx = ecx;
regs->edx = edx;
- inst_len = __get_instruction_length(current, INSTR_CPUID, NULL);
__update_guest_eip(regs, inst_len);
}
unsigned int inst_len;
inst_len = __get_instruction_length(curr, INSTR_HLT, NULL);
+ if ( inst_len == 0 )
+ return 0;
__update_guest_eip(regs, inst_len);
/* Check for pending exception or new interrupt. */
case VMEXIT_VMMCALL:
inst_len = __get_instruction_length(v, INSTR_VMCALL, NULL);
+ if ( inst_len == 0 )
+ break;
HVMTRACE_1D(VMMCALL, v, regs->eax);
rc = hvm_do_hypercall(regs);
if ( rc != HVM_HCALL_preempted )